package main

import (
	"flag"
	"fmt"
	"log"

	"quickK8s/config"
	"quickK8s/internal/cluster"
	"quickK8s/internal/ssh"
	"quickK8s/internal/system"
	"quickK8s/pkg/utils"
)

func main() {
	// 添加备份和恢复参数
	backupFlag := flag.Bool("backup", false, "备份集群数据")
	restoreFlag := flag.Bool("restore", false, "从备份恢复集群")
	// 定义命令行参数
	installSealos := flag.Bool("install", false, "解压安装sealos")
	setupSSHFlag := flag.Bool("ssh", false, "配置SSH免密登录")
	cleanupFlag := flag.Bool("clean", false, "清理环境")
	importK8s := flag.Bool("import", false, "导入k8s离线包")
	initCluster := flag.Bool("init", false, "初始化集群")
	setupHostsFlag := flag.Bool("hosts", false, "配置hosts文件")
	setupKernelFlag := flag.Bool("kernel", false, "配置内核模块和系统参数")
	installPackagesFlag := flag.Bool("packages", false, "安装必要的软件包")
	flag.Parse()

	// 加载配置
	cfg, err := config.LoadConfig("config/config.yaml")
	if err != nil {
		log.Fatalf("加载配置失败: %v", err)
	}

	// 初始化命令执行器
	cmdExecutor := utils.NewCommandExecutor(cfg.Cluster.Env)

	// 初始化各模块管理器
	clusterManager := cluster.NewManager(cfg, cmdExecutor)
	sshManager := ssh.NewManager(cfg, cmdExecutor)
	systemManager := system.NewManager(cfg, cmdExecutor)

	// 根据参数执行对应功能
	if *installSealos {
		clusterManager.InstallSealos()
	}
	if *setupSSHFlag {
		sshManager.SetupSSH()
	}
	if *cleanupFlag {
		clusterManager.CleanupEnvironment()
	}
	if *importK8s {
		clusterManager.ImportK8sTar()
	}
	if *initCluster {
		clusterManager.InitK8sCluster()
	}
	if *setupHostsFlag {
		if err := systemManager.SetupHostsOnAllNodes(); err != nil {
			log.Fatalf("配置 hosts 失败: %v", err)
		}
	}
	if *setupKernelFlag {
		if err := systemManager.SetupKernelModulesOnAllNodes(); err != nil {
			log.Fatalf("配置内核模块和系统参数失败: %v", err)
		}
	}
	if *installPackagesFlag {
		if err := clusterManager.InstallRequiredPackages(); err != nil {
			log.Fatalf("安装必要软件包失败: %v", err)
		}
	}

	// 在帮助信息中添加新选项
	if !(*installSealos || *setupSSHFlag || *cleanupFlag || *importK8s || *initCluster ||
		*setupHostsFlag || *setupKernelFlag || *installPackagesFlag || *backupFlag || *restoreFlag) {
		fmt.Println("使用说明:")
		fmt.Println("  -install: 解压安装sealos")
		fmt.Println("  -ssh: 配置SSH免密登录")
		fmt.Println("  -clean: 清理环境")
		fmt.Println("  -import: 导入k8s离线包")
		fmt.Println("  -init: 初始化集群")
		fmt.Println("  -hosts: 配置hosts文件")
		fmt.Println("  -kernel: 配置内核模块和系统参数")
		fmt.Println("  -packages: 安装必要的软件包")
		fmt.Println("  -backup: 备份集群数据")
		fmt.Println("  -restore: 从备份恢复集群")
		fmt.Println("\n可组合使用，例如:")
		fmt.Println("./main -packages -install -ssh -clean -import -init")
	}
}
